package com.jiangyao.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jiangyao.common.exception.ServerException;
import com.jiangyao.model.dto.SubmitPublicCourseQuestionDTO;
import com.jiangyao.model.dto.SubmitCourseQuestionDTO;
import com.jiangyao.model.dto.SubmitQuestionDTO;
import com.jiangyao.model.dto.backend.QuestionDTO;
import com.jiangyao.model.dto.backend.QuestionDetailDTO;
import com.jiangyao.model.dto.backend.QuestionItemDelDTO;
import com.jiangyao.model.dto.backend.QuestionListPageDTO;
import com.jiangyao.model.entity.Question;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jiangyao.model.vo.AnAuditionQuestionVo;
import com.jiangyao.model.vo.SubmitQuestionVo;
import com.jiangyao.model.vo.backend.QuestionDetailVO;
import com.jiangyao.model.vo.backend.QuestionListVO;

/**
 * <p>
 * 试题信息表 服务类
 * </p>
 *
 * @author zhoushuangxiang
 * @since 2020-08-18
 */
public interface QuestionService extends IService<Question> {
    AnAuditionQuestionVo getQuestion(String questionId) throws ServerException;

    SubmitQuestionVo submitQuestion(SubmitQuestionDTO submitQuestionDTO)  throws ServerException;

    /**
     * 提交课件或章节试题成绩
     * @param submitCourseQuestionDTO
     * @return
     */
    SubmitQuestionVo submitCourseQuestion(SubmitCourseQuestionDTO submitCourseQuestionDTO);
	/**
	 * 提交公开课课件或章节试题成绩
	 * @param submitCourseQuestionDTO
	 * @return
	 */
	SubmitQuestionVo submitPublicCourseQuestion(SubmitPublicCourseQuestionDTO submitCourseQuestionDTO);

	/**
	 * 获取试题列表
	 *
	 * @param listPageDTO 列表DTO
	 * @return 结果
	 */
	Page<QuestionListVO> getListPage(QuestionListPageDTO listPageDTO);

	/**
	 * 增加试题
	 *
	 * @param questionDTO 增加DTO
	 */
	void add(QuestionDTO questionDTO);

	/**
	 * 编辑试题
	 *
	 * @param questionDTO 编辑DTO
	 */
	void edit(QuestionDTO questionDTO);

	/**
	 * 编辑试题状态（启用、禁用）
	 *
	 * @param questionDTO 编辑DTO
	 */
	void editStatus(QuestionDTO questionDTO);

	/**
	 * 获取试题题目列表
	 *
	 * @param questionDTO 试题DTO
	 * @return 结果
	 */
	QuestionDetailVO getItemList(QuestionDTO questionDTO);

	/**
	 * 新建编辑试题题目列表
	 *
	 * @param detailDTO 试题明细DTO
	 */
	void updateItemList(QuestionDetailDTO detailDTO);

	/**
	 * 删除试题题目
	 *
	 * @param delDTO 删除试题题目
	 */
	void deleteItemList(QuestionItemDelDTO delDTO);
}
